package cn.com.shopec.erp.product.service;

import java.util.List;

import cn.com.shopec.erp.common.page.PageFinder;
import cn.com.shopec.erp.common.page.PageQuery;
import cn.com.shopec.erp.product.model.SpecValOptionInfo;
import cn.com.shopec.erp.product.model.SpecificationDetail;
import cn.com.shopec.erp.product.model.SpecificationInfo;

/**
 * @ClassName: ISpecificationService
 * @Description: 货品规格相关的service层接口
 * @author: lule
 * @date 2013-5-28 下午7:40:25
 * 
 */

public interface ISpecificationService {

    /**
     * @Title: getSpecifications
     * @Description: 根据商品分类编号，获得其下的规格
     * @param catNo
     * @return
     * @throws Exception
     * @throws
     * @author: lule
     * @date: 2013-5-28下午8:44:42
     */
    public List<SpecificationInfo> getSpecifications(String catNo) throws Exception;

    /**
     * @Title: getSpecifications
     * @Description: 根据 货品规格名称查询该条记录
     * @param catNo
     * @return
     * @throws Exception
     * @throws
     * @author: lule
     * @date: 2013-5-28下午8:44:42
     */
    public List<SpecificationInfo> getSpecificationsCatName(String specName) throws Exception;
    
    /**
     * @Title: getPagedSpecifications
     * @Description: 根据商品分类编号，获得其下的规格，并分页返回
     * @param catNo
     * @param pageQuery
     * @return
     * @throws Exception
     * @throws
     * @author: lule
     * @date: 2013-5-30下午4:27:51
     */
    public PageFinder<SpecificationInfo> getPagedSpecifications(SpecificationInfo specification, PageQuery pageQuery)
            throws Exception;

    /**
     * @Title: getSpecificationDetail
     * @Description: 根据货品规格编号，取得货品规格明细（包含基本信息和选项）
     * @param specNo
     * @return
     * @throws Exception
     * @throws
     * @author: lule
     * @date: 2013-6-1上午11:16:31
     */
    public SpecificationDetail getSpecificationDetail(String specNo) throws Exception;

    /**
     * @Title: addSpecificationDetail
     * @Description: 新增规格明细数据（含规格基本信息，及规格下的选项）
     * @param detail
     * @return 操作结果代码。（1：成功，0：失败）
     * @throws Exception
     * @throws
     * @author: lule
     * @date: 2013-5-29下午3:36:49
     */
    public int addSpecificationDetail(SpecificationDetail detail) throws Exception;

    /**
     * @Title: saveSpecification
     * @Description: 
     *               保存一个货品规格，如果参数对象中的specNo为空时，则新增规格，如果参数对象中的specNo不为空时，则更新规格（目前只支持更新规格名称
     *               ）。 如果是新增的情况，如果操作成功（返回1）的，则可以从参数对象info中，取得新增的规格的编号specNo值。
     * @param info
     * @return 操作结果代码。（1：成功，0：失败，-1:分类编号或者规格名称为空，-2：更新时，根据规格编号，找不到对应记录,-3:更新时，
     *         无法更新相关货品商品的updatetime值。）
     * @throws Exception
     * @throws
     * @author: lule
     * @date: 2013-6-1上午9:41:57
     */
    public int saveSpecification(SpecificationInfo info) throws Exception;

    /**
     * @Title: delSpecification
     * @Description: 根据规格编号，删除货品规格，以及该规格下的可选项
     * @param specNo
     * @return 操作结果代码。（1：成功，0：失败，-1:失败，无与参数specNo对应的规格记录, -2:当前规格已经被货品使用，不能删除）
     * @throws Exception
     * @throws
     * @author: lule
     * @date: 2013-5-30上午10:47:37
     */
    public int delSpecification(String specNo) throws Exception;

    /**
     * @Title: getSpecValOption
     * @Description: 根据规格选项的编号，取得一个规格选项
     * @param optionNo
     * @return
     * @throws Exception
     * @throws
     * @author: lule
     * @date: 2013-6-1下午2:02:23
     */
    public SpecValOptionInfo getSpecValOption(String optionNo) throws Exception;

    /**
     * @Title: saveSpecValOption
     * @Description: 
     *               保存一个规格选项，如果参数对象中的optionNo为空时，则新增，如果参数对象中的optionNo不为空时，则更新（目前只支持更新选项的名称
     *               ）。 如果是新增的情况，如果操作成功（返回1）的，则可以从参数对象option中，取得新选项的编号optionNo值。
     * @param option
     * @return 
     *         操作结果代码。（1：成功，0：失败，-1：失败，规格编号或者选项名为空，-2：失败，更新时，根据选项编号，无法找到对应的记录,-3:
     *         更新时，无法更新相关货品商品的updatetime值。）
     * @throws Exception
     * @throws
     * @author: lule
     * @date: 2013-6-1上午10:26:32
     */
    public int saveSpecValOption(SpecValOptionInfo option) throws Exception;

    /**
     * @Title: delSpecValOption
     * @Description: 删除规格选项。
     * @param optionNo
     * @return 操作结果代码。（1：成功，0：失败, -1:找不到对应记录, -2:当前规格选项已经被货品使用，不能删除）
     * @throws Exception
     * @throws
     * @author: lule
     * @date: 2013-5-29下午8:14:43
     */
    public int delSpecValOption(String optionNo) throws Exception;

}
